<?php

namespace app;

use think\facade\Cache;
use think\facade\Env;

class Redis
{
    public static function myRedis()
    {
        $options = [
            'type' => env('redis.r_type', 'redis'),
            'host' => env('redis.r_host', '127.0.0.1'),
            'port' => env('redis.r_port', '6379'), //你redis的端口号，可以在配置文件设置其他的
            'password' => env('redis.r_pwd', ''), //这里是你redis配置的密码，如果没有则留空
            'prefix' => env('redis.r_prefix', ''),
            'table' => env('redis.r_table'),
        ];
        $res = Cache::connect($options);
        $redis = $res->handler();
        $redis->select($options['table']);
        return $redis;
    }

    /**
     * 设置redis
     * @param $name string 字段
     * @param $value string 值
     * @param null $expire 过期时间
     * @return mixed
     */
    public static function set($name, $value, $expire = null)
    {
        $return = self::myRedis()->set(Env::get('redis.r_prefix') . $name, $value, $expire);
        return $return;
    }

    /**
     * 随机获取一个key并删除.
     *
     * @param string $name redis字段
     */
    public static function keysDel($name)
    {
        $keys = self::myRedis()->keys('*' . Env::get('redis.r_prefix') . $name . '*');
        if (isset($keys['0'])) {
            $result = self::myRedis()->get($keys['0']);
            if ($result) {
                self::myRedis()->del($keys['0']);
                return $result;
            }
        } else {
            return 0;
        }
    }

    /**
     * 随机获取一个key.
     *
     * @param string $name redis字段
     */
    public static function getKeys($name)
    {
        $result = self::myRedis()->get(Env::get('redis.r_prefix') . $name);
        if ($result) {
            return $result;
        } else {
            return 0;
        }
    }

    public static function deleteKeys($name)
    {
        self::myRedis()->del(Env::get('redis.r_prefix') . $name);
    }

    // 设置list过期时间
    public static function setExpire($name, $expire = null)
    {
        $return = self::myRedis()->expire(Env::get('redis.r_prefix') . $name, $expire);
        return $return;
    }

    // 设置list
    public static function setRpush($name, $value)
    {
        $return = self::myRedis()->rpush(Env::get('redis.r_prefix') . $name, $value);
        return $return;
    }
    // 移除并返回列表的第一个元素。
    public static function Lpop($name)
    {
        $return = self::myRedis()->Lpop(Env::get('redis.r_prefix') . $name);
        return $return;
    }

    // 获取list多少元素
    public static function getLSize($name = '')
    {
        $return = self::myRedis()->lSize(Env::get('redis.r_prefix') . $name);

        return $return;
    }

    // 设置哈希值
    public static function hSet($table, $key, $value)
    {
        $return = self::myRedis()->hSet(Env::get('redis.r_prefix') . $table, $key, $value);

        return $return;
    }

    // 获得某哈希 key 的值
    public static function hGet($table, $key)
    {
        $return = self::myRedis()->hGet(Env::get('redis.r_prefix') . $table, $key);

        return $return;
    }

    // 检查哈希 key是否存在
    public static function hExists($table, $key)
    {
        $return = self::myRedis()->hExists(Env::get('redis.r_prefix') . $table, $key);

        return $return;
    }

    // 删除一个哈希 key
    public static function hDel($table, $key)
    {
        $return = self::myRedis()->hDel(Env::get('redis.r_prefix') . $table, $key);
        return $return;
    }
    // 删除整个哈希表
    public static function del($table)
    {
        $return = self::myRedis()->Del(Env::get('redis.r_prefix') . $table);
        return $return;
    }

    // 获得哈希表中所有的 key
    public static function hKeys($table)
    {
        $return = self::myRedis()->hKeys(Env::get('redis.r_prefix') . $table);

        return $return;
    }

    // 获得哈希表中所有的值
    public static function hVals($table)
    {
        $return = self::myRedis()->hVals(Env::get('redis.r_prefix') . $table);

        return $return;
    }

    // 获得一个哈希表中所有的 key 和 value
    public static function hGetAll($table)
    {
        $return = self::myRedis()->hGetAll(Env::get('redis.r_prefix') . $table);

        return $return;
    }

    // 获取哈希的长度
    public static function hlen($table)
    {
        $return = self::myRedis()->hlen(Env::get('redis.r_prefix') . $table);

        return $return;
    }
    // 清空redis
    public static function flushDb()
    {
        $return = self::myRedis()->flushDb();
        return $return;
    }
}
